/* Copyright 2012-2013 David Tanzer (david@davidtanzer.net) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package net.davidtanzer.wicket.webbinding.test; import static org.junit.Assert.*; import java.util.Collection; import net.davidtanzer.wicket.webaction.ActionContext; import net.davidtanzer.wicket.webbinding.BindableAction; import net.davidtanzer.wicket.webbinding.WebBinding; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.Page; import org.apache.wicket.Session; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.request.ILogData; import org.apache.wicket.request.IRequestCycle; import org.apache.wicket.request.component.IRequestablePage; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.junit.Test; public class BindVoidMethodToAction { public class MyActionContext implements ActionContext { @Override public void error(final String messageKey, final Object... messageParams) { } @Override public void info(final String messageKey, final Object... messageParams) { } @Override public Session getSession() { return null; } } public static class TestClass { public void onSubmit() { } public void onAjax(final AjaxRequestTarget target) { } } protected TestClass context; protected AjaxRequestTarget target; @Test public void boundActionWithNoParameterShouldExecuteMethodWithoutAjaxContext() { TestClass bindable = WebBinding.bindable(TestClass.class); WebBinding.bindAction(testAction()).when(bindable).onSubmit(); context = null; target = null; bindable.onSubmit(); assertNotNull(context); assertNull(target); } @Test public void boundActionWithAjaxParameterShouldExecuteMethodWithAjaxContext() { TestClass bindable = WebBinding.bindable(TestClass.class); WebBinding.bindAction(testAction()).when(bindable).onAjax(null); context = null; target = null; bindable.onAjax(new AjaxRequestTarget() { @Override public Integer getPageId() { return null; } @Override public boolean isPageInstanceCreated() { return false; } @Override public Integer getRenderCount() { return null; } @Override public Class<? extends IRequestablePage> getPageClass() { return null; } @Override public PageParameters getPageParameters() { return null; } @Override public void respond(final IRequestCycle requestCycle) { } @Override public void detach(final IRequestCycle requestCycle) { } @Override public ILogData getLogData() { return null; } @Override public void add(final Component component, final String markupId) { } @Override public void add(final Component... components) { } @Override public void addChildren(final MarkupContainer parent, final Class<?> childCriteria) { } @Override public void addListener(final IListener listener) { } @Override public void appendJavaScript(final CharSequence javascript) { } @Override public void prependJavaScript(final CharSequence javascript) { } @Override public void registerRespondListener(final ITargetRespondListener listener) { } @Override public Collection<? extends Component> getComponents() { return null; } @Override public void focusComponent(final Component component) { } @Override public IHeaderResponse getHeaderResponse() { return null; } @Override public String getLastFocusedElementId() { return null; } @Override public Page getPage() { return null; } }); assertNotNull(context); assertNotNull(target); } public BindableAction<TestClass> testAction() { return new BindableAction<TestClass>() { @Override public void onAction(final TestClass context) { BindVoidMethodToAction.this.context = context; } @Override public void onAction(final TestClass context, final AjaxRequestTarget target) { BindVoidMethodToAction.this.context = context; BindVoidMethodToAction.this.target = target; } }; } }